<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 2. 转换普通值
        // console.log(JSON.stringify('前端胖头鱼')) // "前端胖头鱼"
        // console.log(JSON.stringify(1)) // "1"
        // console.log(JSON.stringify(true)) // "true"
        // console.log(JSON.stringify(null)) // "null"
        // console.log(JSON.stringify(undefined)) // "null"
        let bi=BigInt(100);
        // console.log(JSON.stringify(bi)); //会报错 BigInt 不能被序列化
        //console.log('BigInt',bi);
        const obj={name:'小李子',age:18,msg:'hello world!',value:undefined}
        let src=JSON.stringify(obj)
       // console.log(src);//{"name":"小李子","age":18,"msg":"hello world!"}
        let src2=JSON.stringify(obj,((key,value)=>{
            return typeof value === 'number' ? 1 : value
        }))
       // console.log(src2);//{"name":"小李子","msg":"hello world!"}
        let src3=JSON.stringify(obj,['msg']) 
        // console.log(src3);//{"msg":"hello world!"}
        let src4=JSON.stringify(obj,null,5)
    //     {
    //  "name": "小李子",
    //  "age": 18,
    //  "msg": "hello world!"
    // }
        // console.log(src4);
        /* 
         1. json.stringify 可以传入值或者对象 注意如果对象中有个属性的值为 undefined 那么得到的json格式里面不会有该属性
         且不能转换 BigInt类型的
        2.json.stringify 可以传入第二个参数 是一个数组或者函数 第三个参数用于美化输出， 
        */
        const toJSONObj = {
        name: '前端胖头鱼',
            age:18,
        a:function(){

        },
        toJSON () {
            return  'JSON.stringify'
        }
        }

        console.log(JSON.stringify(toJSONObj))
// "JSON.stringify"


    </script>
</body>
</html>